欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++設(shè)計(jì)模式之簡單工廠模式實(shí)例

 更新時間:2014年09月30日 11:54:05   作者:果凍想  
這篇文章主要介紹了C++設(shè)計(jì)模式之簡單工廠模式實(shí)例,工廠模式有一種非常形象的描述,建立對象的類就如一個工廠,而需要被建立的對象就是一個個產(chǎn)品,需要的朋友可以參考下

問題描述

之前在公司做了一個windows 8平臺的閱讀器。首先,需要將電子書中的內(nèi)容渲染到屏幕上,而電子書每一頁都包含各種各樣的內(nèi)容,比如:圖形、圖像和文字等等;不同的內(nèi)容,就是不同的對象;在將不同的內(nèi)容渲染到屏幕上之前,就需要new操作,建立不同的對象,然后再在屏幕上進(jìn)行描繪。這個時候,就需要進(jìn)行很多new操作,new操作分布在代碼的不同地方,管理起來很麻煩,而且也很亂,到后期擴(kuò)展和維護(hù)的時候,有的時候,對象多的讓開發(fā)人員不知道這個對象是干什么的,這就增加了難度;同時,new操作,都會有對應(yīng)的異常處理,最后,就會發(fā)現(xiàn),在代碼中,new了一個對象,然后,就跟著一段異常處理代碼,這時編碼變的極其混亂和臃腫。那么怎么辦?怎么辦?此時,我們需要一個新的類,專門從事對象的建立和釋放,之后,對象的各種操作,和這個類沒有任何關(guān)系。這個專門建立對象的類,向外暴漏創(chuàng)建對象的接口,供外部調(diào)用。

工廠模式有一種非常形象的描述,建立對象的類就如一個工廠,而需要被建立的對象就是一個個產(chǎn)品;在工廠中加工產(chǎn)品,使用產(chǎn)品的人,不用在乎產(chǎn)品是如何生產(chǎn)出來的。從軟件開發(fā)的角度來說,這樣就有效的降低了模塊之間的耦合。

UML類圖

對于工廠模式,具體上可以分為三類:

1.簡單工廠模式;
2.工廠方法模式;
3.抽象工廠模式。

對于上面的三種工廠模式,從上到下逐步抽象,并且更具一般性。而這篇博文主要講的是簡單工廠模式,后兩種會在之后的博文中接著總結(jié)。

ProductA、ProductB和ProductC繼承自Product虛擬類,Show方法是不同產(chǎn)品的自描述;Factory依賴于ProductA、ProductB和ProductC,F(xiàn)actory根據(jù)不同的條件創(chuàng)建不同的Product對象。

適用場合

1.在程序中,需要創(chuàng)建的對象很多,導(dǎo)致對象的new操作多且雜時,需要使用簡單工廠模式;
2.由于對象的創(chuàng)建過程是我們不需要去關(guān)心的,而我們注重的是對象的實(shí)際操作,所以,我們需要分離對象的創(chuàng)建和操作兩部分,如此,方便后期的程序擴(kuò)展和維護(hù)。

代碼實(shí)現(xiàn):

/*
** FileName   : SimpleFactoryPatternDemo
** Author    : Jelly Young
** Date     : 2013/11/17
** Description : More information
*/
 
#include <iostream>
#include <vector>
using namespace std;
 
typedef enum ProductTypeTag
{
  TypeA,
  TypeB,
  TypeC
}PRODUCTTYPE;
 
// Here is the product class
class Product
{
public:
  virtual void Show() = 0;
};
 
class ProductA : public Product
{
public:
  void Show()
  {
    cout<<"I'm ProductA"<<endl;
  }
};
 
class ProductB : public Product
{
public:
  void Show()
  {
    cout<<"I'm ProductB"<<endl;
  }
};
 
class ProductC : public Product
{
public:
  void Show()
  {
    cout<<"I'm ProductC"<<endl;
  }
};
 
// Here is the Factory class
class Factory
{
public:
  Product* CreateProduct(PRODUCTTYPE type)
  {
    switch (type)
    {
    case TypeA:
      return new ProductA();
 
    case TypeB:
      return new ProductB();
 
    case TypeC:
      return new ProductC();
 
    default:
      return NULL;
    }
  }
};
 
int main(int argc, char *argv[])
{
  // First, create a factory object
  Factory *ProductFactory = new Factory();
  Product *productObjA = ProductFactory->CreateProduct(TypeA);
  if (productObjA != NULL)
    productObjA->Show();
 
  Product *productObjB = ProductFactory->CreateProduct(TypeB);
  if (productObjB != NULL)
    productObjB->Show();
 
  Product *productObjC = ProductFactory->CreateProduct(TypeC);
  if (productObjC != NULL)
    productObjC->Show();
 
  delete ProductFactory;
  ProductFactory = NULL;
 
  delete productObjA;
  productObjA = NULL;
 
  delete productObjB;
  productObjB = NULL;    
 
  delete productObjC;
  productObjC = NULL;
 
  return 0;
}

相關(guān)文章

  • C語言實(shí)現(xiàn)單詞小助手改進(jìn)版

    C語言實(shí)現(xiàn)單詞小助手改進(jìn)版

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)單詞小助手的改進(jìn)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言中的搜索算法詳細(xì)解讀

    C語言中的搜索算法詳細(xì)解讀

    這篇文章主要介紹了C語言中的搜索算法詳細(xì)解讀,如果用樹構(gòu)建一個搜索樹,層層搜索關(guān)鍵字(的一個字母),搜索到后就是需要的描述,就會節(jié)約很多時間,需要的朋友可以參考下
    2023-10-10
  • linux下access函數(shù)的用法介紹

    linux下access函數(shù)的用法介紹

    access檢查用戶對一個文件的權(quán)限情況,根據(jù)mode的值檢查調(diào)用進(jìn)程對文件pathname是否具有讀、寫、或執(zhí)行的權(quán)限
    2013-08-08
  • C語言函數(shù)的遞歸和調(diào)用實(shí)例分析

    C語言函數(shù)的遞歸和調(diào)用實(shí)例分析

    一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層
    2013-07-07
  • C語言struct結(jié)構(gòu)體介紹

    C語言struct結(jié)構(gòu)體介紹

    C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • C++棧(stack)的模板類實(shí)現(xiàn)代碼

    C++棧(stack)的模板類實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C++棧(stack)的模板類實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C++排序算法之插入排序解析

    C++排序算法之插入排序解析

    這篇文章主要介紹了C++排序算法之插入排序解析,將數(shù)組分為有序表和無序表,每次從有序表中取出一個元素,插入到有序表的適當(dāng)位置,每遍歷一次,有序表中元素增加一個,無序表中元素個數(shù)減少一個,重復(fù)n-1次,完成排序,需要的朋友可以參考下
    2023-10-10
  • 《C++ primer plus》讀書筆記(一)

    《C++ primer plus》讀書筆記(一)

    本讀書筆記是C++ primer plus(第六版)前3章的學(xué)習(xí)筆記。非常的淺顯易懂,復(fù)習(xí)C++基礎(chǔ)知識的可以瞄瞄。
    2014-10-10
  • C語言雙向鏈表的原理與使用操作

    C語言雙向鏈表的原理與使用操作

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點(diǎn)中都有兩個指針,分別指向直接后繼和直接前驅(qū)。本文主要介紹了C語言算法中雙向鏈表的實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • 利用C++簡單實(shí)現(xiàn)順序表和單鏈表的示例代碼

    利用C++簡單實(shí)現(xiàn)順序表和單鏈表的示例代碼

    這篇文章主要給大家介紹了關(guān)于利用C++簡單實(shí)現(xiàn)順序表和單鏈表的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友可以參考借鑒,下面來跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08

最新評論